package cn.fansunion.leecode.computer.plus;

import java.util.List;

import cn.fansunion.leecode.kit.Kit;

/**
 * 各位相加 <br/>
 * 给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。 <br/>
 * 返回这个结果。 https://leetcode-cn.com/problems/add-digits/
 * 
 * @author wen.lei@brgroup.com
 *
 *         2022-1-28
 */
public class AddDigits {

    // 示例 1:

    // 输入: num = 38
    // 输出: 2
    // 解释: 各位相加的过程为：
    // 38 --> 3 + 8 --> 11
    // 11 --> 1 + 1 --> 2
    // 由于 2 是一位数，所以返回 2。
    // 示例 1:

    // 输入: num = 0
    // 输出: 0

    // 进阶：你可以不使用循环或者递归，在 O(1) 时间复杂度内解决这个问题吗？
    public int addDigits(int num) {
        if(num<10) {
            return num;
        }
        int digitSum=sumAllDigit(num);
        return addDigits(digitSum);
    }

    private int sumAllDigit(int num) {
        List<Integer> digitList= Kit.intToDigitList(num);
        //输入是int，不可能越界
        int digitSum=0;
        for (Integer digit : digitList) {
            digitSum+=digit;
        }
        return digitSum;
    }
}
